/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._476;

/**
 *
 * 给定一个正整数，输出它的补数。补数是对该数的二进制表示取反。
 *
 * 注意:
 *
 * 给定的整数保证在32位带符号整数的范围内。
 * 你可以假定二进制数不包含前导零位。
 * 示例 1:
 *
 * 输入: 5
 * 输出: 2
 * 解释: 5的二进制表示为101（没有前导零位），其补数为010。所以你需要输出2。
 * 示例 2:
 *
 * 输入: 1
 * 输出: 0
 * 解释: 1的二进制表示为1（没有前导零位），其补数为0。所以你需要输出0。
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._476
 * @ClassName: NumberComplement
 * @Author: linyaonan
 * @Date: 2019/12/31 10:25
 */
public class NumberComplement {

    public int findComplement(int num) {
        String s = Integer.toBinaryString(num);
        char[] chars = s.toCharArray();
        StringBuilder buffer = new StringBuilder();
        for (char c : chars) {
            if (c == '0') {
                c = '1';
            } else {
                c = '0';
            }
            buffer.append(c);
        }
        return Integer.valueOf(buffer.toString(), 2);
    }
}
